package cn.tedu.csmall.product.web;

import cn.tedu.csmall.product.ex.ServiceException;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
public class JsonResult<T> implements Serializable {

    /**
     * 业务状态码
     */
    @ApiModelProperty("业务状态码")
    private Integer state = ServiceCode.OK.getValue();

    /**
     * 操作失败时的提示文本
     */
    @ApiModelProperty("操作失败时的提示文本")
    private String message;

    /**
     * 操作成功时的数据
     */
    @ApiModelProperty("操作成功时的数据")
    /*泛型，要把类名改为JsonResult<>,保持<>的内容与类型名相同*/
    private T data;//T 意为Type

    public static JsonResult<Void> ok(){
        return ok(null);
    }

    /*泛型静态方法需要加<T>,在JsonResult的类型前面加，后面也要加<T>*/
    public static <T> JsonResult<T> ok(T data){
        JsonResult jsonResult = new JsonResult();
        jsonResult.setData(data);
        return jsonResult;
    }

    public static JsonResult<Void> fail(ServiceException e){
        return JsonResult.fail(e.getServiceCode(),e.getMessage());
    }

    public static JsonResult<Void> fail(ServiceCode state,String message){
        JsonResult jsonResult = new JsonResult();
        jsonResult.setState(state.getValue()).setMessage(message);
        return jsonResult;
    }
}
